package spring.cloud.tasks.tasks_manager.schedule;

import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 任务触碰，只要任务实例信息被更新，则任务需要被触碰，那么框架认为该任务的实例信息还有效。
 * 客户端+服务端之间的续期叫心跳。自己监管自己叫触碰。
 * 常用数据变更策略。
 * 1变更数>=x||>=变更超时时间 进行数据持久化。
 * 2更数==0&&>=变更超时时间 进行数据删除。
 */
public class TaskTouchInfo {
    public long lastTouchTimeStamp = System.currentTimeMillis();

    //
    public static class Context {
        public static ConcurrentHashMap<String, TaskTouchInfo> taskIdToTaskTouchInfoMap = new ConcurrentHashMap<String, TaskTouchInfo>();

        public static void put(String taskId) {
            TaskTouchInfo taskTouchInfo = new TaskTouchInfo();
            taskIdToTaskTouchInfoMap.put(taskId, taskTouchInfo);
        }

        public static void put(List<String> taskIdList) {
            for (String taskId : taskIdList) {
                TaskTouchInfo taskTouchInfo = new TaskTouchInfo();
                taskIdToTaskTouchInfoMap.put(taskId, taskTouchInfo);
            }
        }

        public static void remove(String taskId) {
            taskIdToTaskTouchInfoMap.remove(taskId);
        }

        public static TaskTouchInfo get(String taskId) {
            return taskIdToTaskTouchInfoMap.get(taskId);
        }

        public static Set<String> getTaskIdSet() {
            return taskIdToTaskTouchInfoMap.keySet();
        }
    }

}
